package com.ruoyi.web.controller.token;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.security.SecureRandom;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class sqlToken {
    private static final long EXPIRATION_TIME =  Long.MAX_VALUE; // 1天有效期，单位毫秒 86400000
    private static String generateSecureKey() {
        SecureRandom random = new SecureRandom();
        byte[] keyBytes = new byte[64]; // 通常JWT密钥长度为256位（32字节）
        random.nextBytes(keyBytes);
        return Base64.getEncoder().encodeToString(keyBytes); // 使用Base64编码，方便存储和使用
    }
    private static final String SECRET_KEY = generateSecureKey();


//    获取token
    public static String generateToken(String username) {
        Date now = new Date();
        Date expiration = new Date(now.getTime() + EXPIRATION_TIME);

        Map<String, Object> claims = new HashMap<>();
        claims.put("sub", username); // 主题，可以存放用户ID或其他标识信息
        claims.put("iat", now); // 发布时间
        claims.put("exp", expiration); // 过期时间
        claims.put("jti", new Date().toString());
        return Jwts.builder()
                .setClaims(claims)
                .setExpiration(expiration)
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }

//    校验token 和 时效性
    public static boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
            return true;
        } catch (Exception ex) {
            return false;
        }
    }


//    检测用户登陆是否过期

    public static Claims extractAllClaims(String token) {
        return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
    }
}
